/**
811. 子域名访问计数
	一个网站域名，如"discuss.leetcode.com"，包含了多个子域名。
	作为顶级域名，常用的有"com"，下一级则有"leetcode.com"，最低的一级为"discuss.leetcode.com"。
	当我们访问域名"discuss.leetcode.com"时，也同时访问了其父域名"leetcode.com"以及顶级域名"com"。
	给定一个带访问次数和域名的组合，要求分别计算每个域名被访问的次数。其格式为访问次数+空格+地址，例如："9001 discuss.leetcode.com"。
	接下来会给出一组访问次数和域名组合的列表cpdomains。要求解析出所有域名的访问次数，输出格式和输入格式相同，不限定先后顺序。
 */


package main

import (
	"strconv"
	"strings"
)

/*import (
	"fmt"
	"strconv"
	"strings"
)

func main()  {
	str:=[]string{"900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"}
	res:=subdomainVisits(str)

	fmt.Println(res)
}*/

func subdomainVisits(cpdomains []string) []string {
	// 用于域名计数
	countMap := make(map[string]int)
	// 遍历数组
	for i:=0;i<len(cpdomains);i++ {
		// 根据分隔符提取访问次数和完整域名
		countArr :=strings.Split(cpdomains[i], " ")
		count,_ := strconv.Atoi(countArr[0])
		// 倒序遍历域名
		for j:=len(countArr[1])-1;j>=0; {
			// 当遇到点的时候将点后的所有字符作为一个子域名，计入计数map
			if countArr[1][j] == '.' {
				countMap[string(countArr[1][j+1:])]+=count
			}
			j--
		}
		// 将完整域名计入计数map
		countMap[countArr[1]]+= count
	}
	// 初始化结果数组
	res := make([]string, len(countMap))
	index:=0
	// 遍历map，依次将map的value和key添加到结果数组
	for k,v :=range countMap {
		res[index]= strconv.Itoa(v)+" "+k
		index++
	}
	return res
}